'''使用案例 '''

# 引入jsonpath 包
import jsonpath

# 准备数据源
data = {
	"store": {
		"book": [
			{
				"category": "reference",
				"author": "张三",
				"title": "Sayings of the Century",
				"price": 8.95
			},
			{
				"category": "fiction",
				"author": "李四",
				"title": "Sword of Honour",
				"price": 12.99
			},
			{
				"category": "fiction",
				"author": "王五",
				"title": "Moby Dick",
				"isbn": "0-553-21311-3",
				"price": 8.99
			},
			{
				"category": "fiction",
				"author": "马六",
				"title": "The Lord of the Rings",
				"isbn": "0-395-19395-8",
				"price": 22.99
			}
		],
		"bicycle": {
			"color": "red",
			"price": 19.95
		}
	}
}

print(type(data))
# 【方式1】直接读取json
author_list1 = jsonpath.jsonpath(data, '$.store.book[*].author')
print('获取商店所有书籍的作者：', author_list1)

author_list2 = jsonpath.jsonpath(data, '$..author')
print('获取所有作者', author_list2)

price_list = jsonpath.jsonpath(data, '$.store..price')
print('获取所有金额：', price_list)

two_book = jsonpath.jsonpath(data, '$..book[2]')
print('获取第三本书：', two_book)

after_book = jsonpath.jsonpath(data, '$..book[-1:]')
after_book = jsonpath.jsonpath(data, '$..book[(@.length-1)]')
print('获取最后一本书：', after_book, '有两种方式！')

before_book_list = jsonpath.jsonpath(data, '$..book[:2]')
print('获取前两本书：', before_book_list)

filter_isbn = jsonpath.jsonpath(data, '$..book[?(@.isbn)]')
print('过滤出带有isbn字段的数据：', filter_isbn)

filter_pice = jsonpath.jsonpath(data, '$..book[?(@.price<10)]')
print('过滤出比10更便宜的书：', filter_pice)

'''
获取商店所有书籍的作者： ['张三', '李四', '王五', '马六']
获取所有作者 ['张三', '李四', '王五', '马六']
获取所有金额： [8.95, 12.99, 8.99, 22.99, 19.95]
获取第三本书： [{'category': 'fiction', 'author': '王五', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}]
获取最后一本书： [{'category': 'fiction', 'author': '马六', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}] 有两种方式！
获取前两本书： [{'category': 'reference', 'author': '张三', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': '李四', 'title': 'Sword of Honour', 'price': 12.99}]
过滤出带有isbn字段的数据： [{'category': 'fiction', 'author': '王五', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': 'fiction', 'author': '马六', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]
过滤出比10更便宜的书： [{'category': 'reference', 'author': '张三', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': '王五', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}]
'''




# 【方式2】读取json文件
import json
with open('./jsonpath入门案例文件.json', 'r', encoding='utf-8') as fp:
	data2 = json.loads(fp.read())
print(data2)

author_list1 = jsonpath.jsonpath(data2, '$..author')
print('获取商店所有书籍的作者：', author_list1)

author_list2 = jsonpath.jsonpath(data2, '$..author')
print('获取所有作者', author_list2)

price_list = jsonpath.jsonpath(data2, '$.store..price')
print('获取所有金额：', price_list)

two_book = jsonpath.jsonpath(data2, '$..book[2]')
print('获取第三本书：', two_book)

after_book = jsonpath.jsonpath(data2, '$..book[-1:]')
after_book = jsonpath.jsonpath(data2, '$..book[(@.length-1)]')
print('获取最后一本书：', after_book, '有两种方式！')

before_book_list = jsonpath.jsonpath(data2, '$..book[:2]')
print('获取前两本书：', before_book_list)

filter_isbn = jsonpath.jsonpath(data2, '$..book[?(@.isbn)]')
print('过滤出带有isbn字段的数据：', filter_isbn)

filter_pice = jsonpath.jsonpath(data2, '$..book[?(@.price<10)]')
print('过滤出比10更便宜的书：', filter_pice)

'''
获取商店所有书籍的作者： ['张三', '李四', '王五', '马六']
获取所有作者 ['张三', '李四', '王五', '马六']
获取所有金额： [8.95, 12.99, 8.99, 22.99, 19.95]
获取第三本书： [{'category': 'fiction', 'author': '王五', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}]
获取最后一本书： [{'category': 'fiction', 'author': '马六', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}] 有两种方式！
获取前两本书： [{'category': 'reference', 'author': '张三', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': '李四', 'title': 'Sword of Honour', 'price': 12.99}]
过滤出带有isbn字段的数据： [{'category': 'fiction', 'author': '王五', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': 'fiction', 'author': '马六', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]
过滤出比10更便宜的书： [{'category': 'reference', 'author': '张三', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': '王五', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}]
'''